package com.goertek.easyface.device;

import com.goertek.easyface.entity.AAcsFaceDeviceConfig;

import java.util.List;
import java.util.Scanner;

/**
 * @program: easy-face
 * @description:
 * @author: devin.duj
 * @create: 2024-03-29 10:09
 */
public class DeviceCmdControl implements Runnable {
    private DeviceStore deviceStore;
    public DeviceCmdControl(DeviceStore deviceStore){
        this.deviceStore = deviceStore;
    }
    @Override
    public void run() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("程序启动成功，可输入 【exit】 指令安全退出程序");
        while (true) {
            if (scanner.hasNextLine()) {
                String input = scanner.nextLine();
                String[] arr = input.split(" ");
                parseCmd(arr);
            }
        }
    }

    //指令 IP
    //exit 正常退出，可回调钩子释放资源
    //list 列出已经注册的设备信息
    //refresh 将在数据库中，但没有注册到内存中的设备，重新启动并订阅事件
    //register ip 将数据库中配置的设备注册到内存中
    //remove ip 将内存中注册的设备移除
    //start ip 将内存中注册的设备登录+订阅门禁事件
    //stop ip 将内存中注册的设备登出+取消订阅门禁事件
    private void parseCmd(String[] arr) {
        if("exit".equals(arr[0])){
            System.exit(0);
        }else if("register".equals(arr[0])){
            deviceStore.register(arr[1]);
        }else if("remove".equals(arr[0])){
            deviceStore.remove(arr[1]);
        }else if("start".equals(arr[0])){
            deviceStore.start(arr[1]);
        }else if("stop".equals(arr[0])){
            deviceStore.stop(arr[1]);
        }else if("list".equals(arr[0])){
            List<AAcsFaceDeviceConfig> deviceInfoList = deviceStore.getDeviceInfoList();
            if(deviceInfoList.size() > 0 ){
                deviceInfoList.forEach( o -> System.out.println("设备ID["+o.getId()+"]，设备名称["+o.getDeviceName()+"]，设备IP["+o.getDeviceIp()+"]，出入口["+o.getDoorName()+"]，" +
                                                                  "登录状态["+o.getLoginStatus()+"]，订阅事件状态["+o.getSubscribeStatus()+"]，Websocket标识["+o.getWebsocketAddress()+"]，" +
                                                                  "人脸区域门组["+o.getAreaName()+"]，部门名称["+o.getDeptName()+"]"));
            }else{
                System.out.println("未注册任何设备");
            }
        }else if("refresh".equals(arr[0])){
            deviceStore.startBatch(true);
        }else if("syncdb".equals(arr[0])){
            deviceStore.syncDatabase();
        }else{
            System.out.println("【无效指令，仅支持以下指令】\n" +
                    "exit 正常退出，可回调钩子释放资源\n" +
                    "list 列出已经注册的设备信息\n" +
                    "refresh 将在数据库中，但没有注册到内存中的设备，重新启动并订阅事件\n" +
                    "syncdb 将已经注册到内存中的设备，同步数据库的最新配置\n" +
                    "register ip 将数据库中配置的设备注册到内存中\n" +
                    "remove ip 将内存中注册的设备移除\n" +
                    "start ip 将内存中注册的设备登录+订阅门禁事件\n" +
                    "stop ip 将内存中注册的设备登出+取消订阅门禁事件");
        }
    }
}